<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 构造函数的属性的继承
    // 人类类型
    function Person(name,age,sex) {
      this.name = name;
      this.age = age;
      this.sex = sex;
    }
    // 父类型的原型对象中有方法也需要继承
    Person.prototype.sayHi = function () {
      console.log("你好");
    };
    // 学生类型
    function Student(name,age,sex,score) {
      Person.call(this,name,age,sex); 
      this.score = score;
    }
    // 子类型的原型对象上，需要继承父类型原型对象的方法
    // 方法1：对象拷贝继承
    // for (var k in Person.prototype) {
    //   // 保留自己的 constructor 不要进行继承
    //   if (k === "constructor") {
    //     continue;
    //   }
    //   Student.prototype[k] = Person.prototype[k];
    // } 

    // 方法2：原型继承
    Student.prototype = new Person();
    Student.prototype.constructor = Student;
    
    // 老师类型
    function Teacher(name,age,sex,salary) {
      Person.call(this,name,age,sex); 
      this.salary = salary;
    }
    // 创建学生的实例对象
    var s1 = new Student("zs",18,"男",89);
    var s2 = new Student("ls",19,"男",92);
    console.dir(s1);
    console.dir(s2);
    s1.sayHi();
  </script>
</body>

</html>